package com.framework.service.yhbservice;

import com.baomidou.mybatisplus.service.IService;
import com.framework.page.PageUtils;
import com.framework.yhbEntity.activiy.YhbActivityInfo;
import com.framework.yhbEntity.user.YhbCusTer;
import com.framework.yhbEntity.user.YhbUser;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author wq
 */
public interface YhbUserService extends IService<YhbUser> {

    /**
     * 通过手机号码和渠道查询用户
     * @param phone
     * @param deptId
     * @return
     */
    YhbUser queryUserByPhone(String phone, Long deptId);

    /**
     * 登录
     * @param phone
     * @param deptId
     * @param smsCode
     * @return
     */
    Map<String, Object> login(String phone, Long deptId, String smsCode);

    /**
     * 根据token获取商户
     * @param token
     * @return
     */
    Map<String, Object> getUserByToken(String token);

    /**
     * 注册商户
     * @param phone
     * @param deptId
     * @param sn
     * @param username
     */
    Map<String, Object> registUser(String phone, Long deptId, String sn, String username);

    /**
     * 根据token获取user对象
     * @param token
     * @return
     */
    YhbUser queryUserByToken(String token);

    /**
     * 更新头像
     * @param token
     * @param headImg
     */
    void updateHeadImg(String token, String headImg);

    /**
     * 设置交易密码
     * @param token
     * @param password
     * @param confPassword
     */
    void setTradePassword(String token, String password, String confPassword);

    /**
     * 修改交易密码
     * @param token
     * @param password
     * @param confPassword
     * @param smsCode
     * @param oldPassword
     */
    void updateTradePassword(String token, String password, String confPassword, String smsCode, String oldPassword);

    /**
     * 提现
     * @param token
     * @param takeAmount
     * @param password
     * @param yhbBankId
     */
    void takeMoney(String token, String takeAmount, String password, String yhbBankId);

    /**
     * 退出登录
     * @param token
     */
    void outLogin(String token);

    /**
     * 前往体现页面
     * @param token
     * @return
     */
    Map<String, Object> toTakePage(String token);

    /**
     * 忘记密码
     * @param token
     * @param password
     * @param confPassword
     * @param smsCode
     */
    void forgetTradePassword(String token, String password, String confPassword, String smsCode);

    /**
     * 修改身份证
     * @param user
     * @param identity
     */
    void updateIdentity(YhbUser user, String identity);

    /**
     * 根据token修改身份证
     * @param token
     * @param identity
     * @param smsCode
     */
    void updateIdentityByToken(String token, String identity, String smsCode);

    /**
     * 查询个人的sn的所属人
     * @param token
     * @return
     */
    List<Map<String, Object>> queryOwnerBySn(String token);

    /**
     * 新增用户
     * @param yct
     * @return
     */
    YhbUser addNewUser(YhbCusTer yct);

    /**
     * 根据userid 查询user
     * @param userId
     * @return
     */
    YhbUser queryUserByUserId(String userId);

    /**
     * 新增余额
     * @param user
     * @param amount
     */
    void addAmount(YhbUser user, BigDecimal amount);

    /**
     * 扣除余额
     * @param agId
     * @param totalAmount
     */
    void reduceBalance(String agId, BigDecimal totalAmount);

    /**
     * 分页查询
     * @param params
     * @return
     */
    PageUtils queryUserList(Map<String, Object> params);

    /**
     * 返还余额
     * @param userId
     * @param takeAmount
     */
    void addBalance(String userId, BigDecimal takeAmount);

    /**
     * 返还冻结金额
     * @param userId
     * @param amount
     * @param sn
     */
    void rebackFrozenAmount(String userId, BigDecimal amount, String sn);

    /**
     * 冻结资金并且返还agent的金额
     * @param sn
     * @param userId
     * @param yhbActivityInfo
     */
    void frozenAmount(String sn, String userId, YhbActivityInfo yhbActivityInfo);
}
